package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.service.ManageService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api("商品管理后端接口")
@RestController // @Controller:控制器 @ResponseBody：1. 返回Json依赖一个jar 包; 数据 2.直接将数据输出页面.
@RequestMapping("/admin/product") // 类中所有的控制器，映射器 都是以/admin/product  开头。
//@CrossOrigin
@RefreshScope
public class ManageController {

    @Autowired
    private ManageService manageService;
    //  表示获取一级分类数据
    //  返回数据统一封装到Result 对象

    /**
     * 查询所有一级分类数据
     * @return
     */
    //  页面发起的get ,GetMapping post PostMapping ...
    @GetMapping("/getCategory1")
    public Result getCategory1(){
        //  调用服务层方法. select * from base_category1 where is_deleted = 0;
        List<BaseCategory1> baseCategory1List = manageService.getCategory1();
        //  返回数据
        return Result.ok(baseCategory1List);
    }

    //  根据一级分类Id 获取二级分类数据
    //  /getCategory2/{category1Id} resutful 传值. category1Id 数据类型，根据
    //  这个数据是动态变化的：{} @PathVariable 变量的数据类型{可以看实体类.} 变量名{跟传递的参数名称一样}
    //  admin/product/getCategory2/3
    @GetMapping("/getCategory2/{category1Id}")
    public Result getCategory2(@PathVariable Long category1Id){
        //  调用服务层方法. select * from base_category2 where category1Id = ? and is_deleted = 0;
        List<BaseCategory2> baseCategory2ist = manageService.getCategory2(category1Id);
        //  返回数据
        return Result.ok(baseCategory2ist);
    }

    //  根据二级分类id查询三级分类数据.
    //  /admin/product/getCategory3/{category2Id}
    @GetMapping("/getCategory3/{category2Id}")
    public Result getCategory3(@PathVariable Long category2Id){
        //  调用服务层方法. select * from base_category1 where is_deleted = 0;
        List<BaseCategory3> baseCategory3ist = manageService.getCategory3(category2Id);
        //  返回数据
        return Result.ok(baseCategory3ist);
    }

    //  根据分类Id 查询平台属性集合数据
    //  /admin/product/attrInfoList/{category1Id}/{category2Id}/{category3Id}
    @GetMapping("/attrInfoList/{category1Id}/{category2Id}/{category3Id}")
    public Result getAttrInfoList(@PathVariable Long category1Id,
                                  @PathVariable Long category2Id,
                                  @PathVariable Long category3Id
                                  ){
        //  调用服务层方法.
        List<BaseAttrInfo> baseAttrInfoList = manageService.getAttrInfoList(category1Id,category2Id,category3Id);
        //  返回数据.
        return Result.ok(baseAttrInfoList);
    }

    //  保存平台属性： springMVC
    //  /admin/product/saveAttrInfo
    //  如何接受Json 数据，并将数据转换为JavaObject!
    //  如果有实体类直接使用即可，如果没有需要创建对应的 DTO
    //  @RequestBody --> Json===>JavaObject
    //  @ResponseBody JavaObject====>Json
    @PostMapping("saveAttrInfo")
    public Result saveAttrInfo(@RequestBody BaseAttrInfo baseAttrInfo){
        //  调用服务层方法.
        manageService.saveAttrInfo(baseAttrInfo);
        //  默认返回.
        return Result.ok();
    }

    //  根据平台属性Id 获取属性值集合
    //  /admin/product/getAttrValueList/{attrId}
    @GetMapping("getAttrValueList/{attrId}")
    public Result getAttrValueList(@PathVariable Long attrId){

        //  方式一：
        //  直接查询的是平台属性值表： select * from base_attr_value where attr_id = 1;
        //  List<BaseAttrValue> baseAttrValueList = this.manageService.getAttrValueList(attrId);
        //  从业务上优化代码：先查询平台属性： 有属性才会获取属性值！
        //  方式二：
        BaseAttrInfo baseAttrInfo = this.manageService.getBaseAttrInfo(attrId);
        //  返回result: 平台属性值集合。
        return Result.ok(baseAttrInfo.getAttrValueList());
    }
}
